package com.serviportales.contactenos.model;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

import org.hibernate.validator.constraints.Email;

import com.serviportales.contactenos.datatypes.EstadoMensaje;
import com.serviportales.serviportales.model.GenericEntity;

@Entity
@Table(name = "TC_MENSAJE")
public class Mensaje extends GenericEntity<Mensaje> {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(generator = "TC_MENSAJE_GEN", strategy = GenerationType.TABLE)
	@TableGenerator(name = "TC_MENSAJE_GEN", //
	table = "TC_SEQUENCES", //
	pkColumnName = "CODIGO", //
	pkColumnValue = "VALOR",//
	valueColumnName = "TC_MENSAJE_PK",//
	allocationSize = 1,//
	initialValue = 0)
	private Long scMensaje;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "CDMOTIVO")
	private MotivoContacto motivoContacto;

	@Column(name = "NOMBRE", length = 120, nullable = false)
	@NotNull(message = "{mensaje.nombre.null}")
	private String nombre;

	@Column(name = "EMAIL", length = 120, nullable = false)
	@Email(message = "{mensaje.email.pattern}")
	private String email;

	@Column(name = "TELEFONO", length = 120, nullable = false)
	@Pattern(message = "{mensaje.telefono.pattern}", regexp = "([0-9]{7}){0,}")
	private String telefono;

	@Column(name = "CELULAR", length = 120, nullable = false)
	@Pattern(message = "{mensaje.celular.pattern}", regexp = "([0-9]{10}){0,}")
	private String celular;

	@Column(name = "ADJUNTO")
	@Lob
	@Basic(fetch = FetchType.LAZY)
	private byte[] adjunto;

	@Column(name = "NOMBRE_ADJUNTO", length = 120)
	private String nombreAdjunto;

	@Column(name = "EXT_ADJUNTO", length = 120)
	private String extensionAdjunto;

	@Column(name = "MENSAJE")
	@NotNull(message = "{mensaje.mensaje.null}")
	@Lob
	private String mensaje;

	@Column(name = "RESPUESTA")
	@Lob
	private String respuesta;

	@Embedded
	private EstadoMensaje estadoMensaje;

	public Mensaje() {

	}

	public Mensaje(Long scMensaje, String motivoContactoCodigo, String motivoContactoNombre, String email, String telefono, String celular, String mensaje, String respuesta, String nombre, String estadoMensajeCodigo, String nombreAdjunto) {
		this.scMensaje = scMensaje;
		MotivoContacto motivoContacto = new MotivoContacto();
		motivoContacto.setCodigo(motivoContactoCodigo);
		motivoContacto.setNombre(motivoContactoNombre);
		this.motivoContacto = motivoContacto;
		this.email = email;
		this.telefono = telefono;
		this.celular = celular;
		this.mensaje = mensaje;
		this.respuesta = respuesta;
		this.nombre = nombre;
		estadoMensaje = new EstadoMensaje();
		estadoMensaje.setCodigo(estadoMensajeCodigo);
		this.nombreAdjunto = nombreAdjunto;
	}

	public Long getScMensaje() {
		return scMensaje;
	}

	public void setScMensaje(Long scMensaje) {
		this.scMensaje = scMensaje;
	}

	public MotivoContacto getMotivoContacto() {
		return motivoContacto;
	}

	public void setMotivoContacto(MotivoContacto motivoContacto) {
		this.motivoContacto = motivoContacto;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public String getCelular() {
		return celular;
	}

	public void setCelular(String celular) {
		this.celular = celular;
	}

	public byte[] getAdjunto() {
		return adjunto;
	}

	public void setAdjunto(byte[] adjunto) {
		this.adjunto = adjunto;
	}

	public String getNombreAdjunto() {
		return nombreAdjunto;
	}

	public void setNombreAdjunto(String nombreAdjunto) {
		this.nombreAdjunto = nombreAdjunto;
	}

	public String getExtensionAdjunto() {
		return extensionAdjunto;
	}

	public void setExtensionAdjunto(String extensionAdjunto) {
		this.extensionAdjunto = extensionAdjunto;
	}

	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}

	public String getRespuesta() {
		return respuesta;
	}

	public void setRespuesta(String respuesta) {
		this.respuesta = respuesta;
	}

	public EstadoMensaje getEstadoMensaje() {
		return estadoMensaje;
	}

	public void setEstadoMensaje(EstadoMensaje estadoMensaje) {
		this.estadoMensaje = estadoMensaje;
	}
}